/**
 * 
 */
package ar.com.fiuba.team2.model;

import java.util.ArrayList;
import java.util.List;

import org.jdom2.Element;

import ar.com.fiuba.team2.parser.GeneralParser;

/**
 * @author sergio
 *
 */
public class MiembroChat {

	private long id;
	private String nombre;
	private boolean status;
	private List<MensajeChat> mensajes;
	
	
	public MiembroChat(){
		mensajes = new ArrayList<MensajeChat>();
	}

	public MiembroChat(long id){
		this();
		this.setId(id);
	}
	
	public MiembroChat(String nombre,boolean status){
		this();
		this.setNombre(nombre);
		this.setStatus(status);
	}


	/**
	 * @return the id
	 */
	public long getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(long id) {
		this.id = id;
	}

	/**
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}
	/**
	 * @param nombre the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public boolean isStatus() {
		return status;
	}
	public void setStatus(boolean status) {
		this.status = status;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (int) (id ^ (id >>> 32));
		result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
		result = prime * result + (status ? 1231 : 1237);
		return result;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		MiembroChat other = (MiembroChat) obj;
		if (id != other.id)
			return false;
		if (nombre == null) {
			if (other.nombre != null)
				return false;
		} else if (!nombre.equals(other.nombre))
			return false;
		if (status != other.status)
			return false;
		return true;
	}
	
	@Override
	public String toString() {
		return "MiembroChat [id: " + id + ", nombre: " + nombre + ", status: " + status + "]";
	}

	public String toXML() {
		StringBuilder str = new StringBuilder();
		str.append("<MiembroChat><id>");
			str.append(getId()); 
			str.append("</id><nombre>");
			str.append(getNombre());
			str.append("</nombre><estado>");
			str.append(isStatus());
			str.append("</estado>");
		if(!getMensajes().isEmpty()) {
			str.append("<mensajesChat>");
			for(MensajeChat m : getMensajes()) {
				str.append(m.toXML());
			}
			str.append("</mensajesChat>");
		}
		str.append("</MiembroChat>");
		
		return str.toString();
	}

	public List<MensajeChat> getMensajes() {
		return mensajes;
	}

	public void addMensajes(MensajeChat mensajes) {
		this.mensajes.add(mensajes);
	}
	
	public void fromXML(Element element) {
		Long id = GeneralParser.extractLong(element,"id");
		this.setId(id);
		
		String nombre = GeneralParser.extractString(element,"nombre");
		this.setNombre(nombre);					
		
		String estado = GeneralParser.extractString(element,"estado");
		this.setStatus("true".equals(estado));
	}
	
}
